import { log } from './logger'

class Tools {
  static replaceInfoImg(info: string) {
    if (!info) {
      return info
    }
    // 正则表达式匹配<img开始的所有标签，但不包括>
    const regex = /<img([^>]*)>/g
    let style = 'display: block;width:90%;height: auto;margin: 10px auto;'

    let replacedString = info.replace(regex, function (match: any, p1: any) {
      log.debug('图片正则替换', match)
      // p1是匹配到的第一个分组，即<img标签的所有属性
      // 在属性前插入style属性
      return `<img style="${style}"${p1 ? ' ' + p1 : ''}>`
    })
    replacedString = replacedString.replace(/\r\n/g, '<br>')
    replacedString = replacedString.replace(/\n/g, '<br>')
    replacedString = replacedString.replace(/\r/g, '<br>')
    return replacedString
  }

  static concatJson(...jsons: any) {
    let json: any = {}
    for (let index = 0; index < jsons.length; index++) {
      let element = jsons[index]
      for (let key in element) {
        json[key] = element[key]
      }
    }
    return json
  }

  static bucketName(value: string) {
    return value.replace(/api-huhuiyu-oss-\d+-/g, '')
  }

  static formatDate(value: Date | Number | string, format: string = 'yyyy-MM-dd hh:mm:ss') {
    try {
      let time = new Date()
      if (typeof value === 'number' || typeof value === 'string') {
        time.setTime(parseInt(value.toString()))
      } else if (value instanceof Date) {
        time = value
      }
      let year = time.getFullYear() + ''
      let month = time.getMonth() + 1 + ''
      let day = time.getDate() + ''
      let hour = time.getHours() + ''
      let minute = time.getMinutes() + ''
      let second = time.getSeconds() + ''
      let ms = time.getMilliseconds() + ''
      month = month.padStart(2, '0')
      day = day.padStart(2, '0')
      hour = hour.padStart(2, '0')
      minute = minute.padStart(2, '0')
      second = second.padStart(2, '0')
      ms = ms.padStart(3, '0')

      format = format.replace(/yyyy/g, year)
      format = format.replace(/MM/g, month)
      format = format.replace(/dd/g, day)
      format = format.replace(/hh/g, hour)
      format = format.replace(/mm/g, minute)
      format = format.replace(/ss/g, second)
      format = format.replace(/ms/g, ms)
      return format
    } catch (ex) {
      log.error(ex)
      return ''
    }
  }

  static async copyText(text: string) {
    // 剪贴板对象的实现方式（更新和更好的方式，但是需要浏览器授权）
    try {
      await navigator.clipboard.writeText(text)
      return
    } catch (ex) {
      log.error(ex)
    }
    // 原始的，不支持剪贴板对象的实现方式
    // 创建输入框并设置内容
    let input = document.createElement('input')
    input.value = text
    // 放到页面上
    document.body.appendChild(input)
    // 选中文本框中的内容
    input.focus()
    input.select()
    input.setSelectionRange(0, text.length)
    // 调用浏览器的复制指令
    document.execCommand('Copy')
    // 移除input
    document.body.removeChild(input)
  }

  // 是否为手机模式
  static isMobile() {
    return Tools.getBrowserInfo().versions.mobile
  }
  // 是否为ios
  static isIos() {
    return Tools.getBrowserInfo().versions.ios
  }
  // 是否为android
  static isAndroid() {
    return Tools.getBrowserInfo().versions.android
  }
  // 是否为weixin
  static isWx() {
    return Tools.getBrowserInfo().versions.weixin
  }

  // 获取浏览器信息
  static getBrowserInfo() {
    let browser = {
      versions: (function () {
        let u = navigator.userAgent
        // let app = navigator.appVersion;
        return {
          trident: u.indexOf('Trident') > -1, //IE内核
          presto: u.indexOf('Presto') > -1, //opera内核
          webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
          gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
          mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
          ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
          android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
          iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
          iPad: u.indexOf('iPad') > -1, //是否iPad
          webApp: u.indexOf('Safari') == -1, //是否web应该程序，没有头部与底部
          weixin: u.indexOf('MicroMessenger') > -1, //是否微信 （2015-01-22新增）
        }
      })(),
    }
    return browser
  }
}

export { Tools as Tools, Tools as default }
